#include"server_message_handler.h"
#include<QDebug>
#include<QJsonObject>

ServerMessageHandler::ServerMessageHandler(ServerNetwork *network, QObject *parent) : QObject(parent), network(network) {

    // 连接服务端网络模块的 newMessageReceived 信号到 handleMessage 槽函数
    //connect(network, &ServerNetwork::newMessageReceived, this, &ServerMessageHandler::handleMessage);
}

ServerMessageHandler::~ServerMessageHandler() {
    // 释放服务端用户管理模块对象的内存
}

void ServerMessageHandler::sendResponse(const Message &message){

}

// 处理接收到的消息的槽函数实现
void ServerMessageHandler::handleMessage(const Message &message) {
    // 创建一个新的 Message 结构体，用于存储响应消息
    Message response;
    // 设置响应消息的发送者为 "Server"
    response.sender = "Server";
    // 设置响应消息的接收者为原始消息的发送者
    response.receiver = message.sender;

    // 根据消息类型进行不同的处理
    switch (message.type) {
    case LOGIN_REQUEST:
        // 如果是登录请求，设置响应消息类型为登录响应
        response.type = LOGIN_RESPONSE;
        // 调用服务端用户管理模块的登录函数，验证用户名和密码
        //response.success = userManager->loginUser(message.username, message.password);
        // 发送响应消息
        //sendResponse(response);
        break;
    case REGISTER_REQUEST:
        // 如果是注册请求，设置响应消息类型为注册响应
        response.type = REGISTER_RESPONSE;
        // 调用服务端用户管理模块的注册函数，注册新用户
        //response.success = userManager->registerUser(message.username, message.password);
        // 发送响应消息
        sendResponse(response);
        break;
    case PRIVATE_CHAT:
        // 如果是私聊消息，遍历所有客户端套接字
        for (QTcpSocket *socket : network->getClients()) {
            // 这里需要实现查找接收者的逻辑
            if (true) {
                // 转发私聊消息给接收者
                //network->forwardMessage(message);
            }
        }
        break;
    case GROUP_CHAT:
        // 如果是群聊消息，遍历所有客户端套接字
        for (QTcpSocket *socket : network->getClients()) {
            // 转发群聊消息给所有客户端
            //network->forwardMessage(message);
        }
        break;
    default:
        // 如果是未知消息类型，输出调试信息
        qDebug() << "Unknown message type";
        break;
    }
}
